package tc.de.krawallmann.gravoblocks.game.model;

/**
 * The Interface ITetrisGameRule.
 * @author KrawallMann
 * @version 1.0
 */
public interface ITetrisGameRule extends IGameRule{

	/**
	 * Checks if is fall request.
	 * 
	 * @return true, if is fall request
	 */
	boolean isFallRequest();

	/**
	 * Checks if is game over.
	 * 
	 * @return true, if is game over
	 */
	boolean isGameOver();

	/**
	 * Checks if is hold request.
	 * 
	 * @return true, if is hold request
	 */
	boolean isHoldRequest();

	/**
	 * Checks if is move left request.
	 * 
	 * @return true, if is move left request
	 */
	boolean isMoveLeftRequest();

	/**
	 * Checks if is move right request.
	 * 
	 * @return true, if is move right request
	 */
	boolean isMoveRightRequest();

	/**
	 * Checks if is pause request.
	 * 
	 * @return true, if is pause request
	 */
	boolean isPauseRequest();

	/**
	 * Checks if is rotate left.
	 * 
	 * @return true, if is rotate left
	 */
	boolean isRotateLeft();

	/**
	 * Checks if is rotate right.
	 * 
	 * @return true, if is rotate right
	 */
	boolean isRotateRight();

	/**
	 * Sets the fall request.
	 * 
	 * @param fallRequest
	 *            the new fall request
	 */
	void setFallRequest(final boolean fallRequest);
	
	/**
	 * Sets the pause request.
	 * 
	 * @param pauseRequest
	 *            the new pause request
	 */
	void setPauseRequest(boolean pauseRequest);
	
	/**
	 * Checks if is pause request.
	 * 
	 * @param pauseRequest
	 *            the pause request
	 * @return true, if is pause request
	 */
	boolean isPauseRequest(boolean pauseRequest);

	/**
	 * Sets the hold request.
	 * 
	 * @param holdRequest
	 *            the new hold request
	 */
	void setHoldRequest(final boolean holdRequest);

	/**
	 * Sets the move left request.
	 * 
	 * @param moveLeftRequest
	 *            the new move left request
	 */
	void setMoveLeftRequest(final boolean moveLeftRequest);

	/**
	 * Sets the move right request.
	 * 
	 * @param moveRightRequest
	 *            the new move right request
	 */
	void setMoveRightRequest(final boolean moveRightRequest);

	/**
	 * Sets the rotate left.
	 * 
	 * @param rotateLeft
	 *            the new rotate left
	 */
	void setRotateLeft(final boolean rotateLeft);

	/**
	 * Sets the rotate right.
	 * 
	 * @param rotateRight
	 *            the new rotate right
	 */
	void setRotateRight(final boolean rotateRight);

	/**
	 * Sets the fall down request.
	 * 
	 * @param falldownRequest
	 *            the new fall down request
	 */
	void setFallDownRequest(boolean falldownRequest);

	/**
	 * Sets the move left key delay.
	 * 
	 * @param leftKeyDelay
	 *            the new move left key delay
	 */
	void setMoveLeftKeyDelay(int leftKeyDelay);

	/**
	 * Sets the left times.
	 * 
	 * @param leftTimes
	 *            the new left times
	 */
	void setLeftTimes(int leftTimes);

	/**
	 * Sets the move right key delay.
	 * 
	 * @param rightKeyDelay
	 *            the new move right key delay
	 */
	void setMoveRightKeyDelay(int rightKeyDelay);

	/**
	 * Sets the fall key delay.
	 * 
	 * @param fallKeyDelay
	 *            the new fall key delay
	 */
	void setFallKeyDelay(int fallKeyDelay);

	/**
	 * Sets the right times.
	 * 
	 * @param rightTimes
	 *            the new right times
	 */
	void setRightTimes(int rightTimes);

	/**
	 * Sets the fall times.
	 * 
	 * @param fallTimes
	 *            the new fall times
	 */
	void setFallTimes(int fallTimes);

	/**
	 * Gets the score.
	 * 
	 * @return the score
	 */
	int getScore();

	/**
	 * Gets the cleared rows.
	 * 
	 * @return the cleared rows
	 */
	int getClearedRows();

	/**
	 * Gets the level.
	 * 
	 * @return the level
	 */
	int getLevel();


}
